//
// Created by Administrator on 2020/7/9.
//T6章:数组、指针与字符串(2)
//对象指针
//定义:类名 *对象指针名;
//eg: Point a(5,10);
//    Point *ptr;
//    ptr=&a;

//通过指针访问对象成员
//对象指针名->成员名
//eg:ptr->getx()相当于(*ptr).getx();
#include <iostream>
using namespace std;
class Point
{
public:
    Point(int x=0,int y=0):x(x),y(y){}
    int getX()const{return x;}
    int getY()const{return y;}

private:
    int x,y;
};

int main()
{
    Point a(4,5);
    Point *p1=&a;//定义对象指针,用a的地址初始化
    cout<<p1->getX()<<endl;//用指针访问对象成员
    cout<<a.getX()<<endl;//用对象名访问对象成员
    return 0;
}


//this指针
//a.隐含于类的每一个非静态成员函数中。
//b.指出成员函数所操作的对象。当通过一个对象调用成员函数时,系统将该对象的地址赋给this
//  指针,然后调用成员函数,成员函数对对象的数据成员进行操作时,就隐含使用了this指针。
//例如:Point类的getX函数中的的语法:return x;相当于return this->x;

//错误例子(前面提过)
/*
class Fred;//前向引用声明
class Barney
{
    Fred x;//错误:类Fred的声明尚不完善
};
class Fred
{
    Barney y;
};
*/

//修改错误例子(Right)
class Fred;//前向引用声明
class Barney
{
    Fred *x;
};
class Fred
{
    Barney y;
};
